class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        //处理边界情况
        if(headA==nullptr||headB==nullptr) return nullptr;
        ListNode* p1=headA;
        ListNode* p2=headB;

        //当两个指针不相等（遍历）
        //跳出循环
        //1.找到相交点了  2.两个同时到末尾哦（也相等nullptr）
        //实际上：两次就OK（A+B=B+A）   
        //相同点包括：相交点+nullptr
        //A表示头A到相同点点的距离  B表示头B到相同点的距离
        while(p1!=p2)
        {
            if(p1==nullptr)     //p1到末尾，跳到链表B上
            {
                p1=headB;
            }
            else
            {
                p1=p1->next;
            }
            if(p2==nullptr)     //p2到末尾，跳到链表A上
            {
                p2=headA;
            }
            else
            {
                p2=p2->next;
            }
        }
        return p1;  
    }
};